package com.pan.test.mappers;

import com.pan.test.entity.po.OrderInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Mapper
public interface OrderMapper {
    /**
     * 插入订单
     */
    int insert(@Param("bean") OrderInfo orderInfo);
    
    /**
     * 根据订单ID查询订单
     */
    OrderInfo selectByOrderId(@Param("orderId") String orderId);
    
    /**
     * 更新订单状态
     */
    int updateStatus(@Param("orderId") String orderId, @Param("status") Integer status);

    /**
     * 获取总交易金额
     */
    BigDecimal getTotalAmount();

    /**
     * 获取总订单数
     */
    Integer getTotalOrders();

    /**
     * 获取今日订单数
     */
    Integer getTodayOrders();

    /**
     * 获取支付成功率
     */
    BigDecimal getSuccessRate();

    /**
     * 获取支付方式分布
     */
    List<Map<String, Object>> getPaymentMethodStats();

    /**
     * 获取最近交易记录
     */
    List<Map<String, Object>> getRecentOrders();

    /**
     * 获取指定时间范围内的交易数据
     */
    List<Map<String, Object>> getPaymentTrendData(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 获取订单总数
     */
    Integer getOrderCount(@Param("orderNo") String orderNo,
                         @Param("payType") String payType,
                         @Param("status") String status,
                         @Param("startTime") String startTime,
                         @Param("endTime") String endTime);

    /**
     * 分页查询订单列表
     */
    List<Map<String, Object>> getOrderList(@Param("orderNo") String orderNo,
                                         @Param("payType") String payType,
                                         @Param("status") String status,
                                         @Param("startTime") String startTime,
                                         @Param("endTime") String endTime,
                                         @Param("pageNo") Integer offset,
                                         @Param("pageSize") Integer pageSize);
} 